CloudWatch Logsのログの異常検出でWarningとInfoログを試してみた #AWSreInvent

CloudWatch Logsのログの異常検出でWarningとInfoログを試してみた #AWSreInvent

Warningログは検出されましたが、Infoログは検出されませんでした。
Clock Icon2023.12.15

CloudWatch Logsでログの異常検出ができるようになりました。 以前に試したときはERRORログだったのですが、WarningログとInfoログがどうなるか気になったので、試してみました。

おすすめの方

  • CloudWatch Logsの異常検出の様子を知りたい方

前提

Lambdaにwarningログとinfoログを追加する

Lambdaコード

import json
import logging
import random

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)


def lambda_handler(event, context):
    rand_value1 = int(random.uniform(0, 1000))
    rand_value2 = int(random.uniform(0, 1000))  # あとで (1_000_000, 1_000_000_000) にする

    if rand_value1 > 950:
        logger.warning(f"data size is large: {rand_value1}")

    logger.info(f"rand_value2: {rand_value2}")

    return {
        "statusCode": 200,
        "body": json.dumps("Hello from Lambda!")
    }

1〜2時間ほど待つと、warningの異常を検出した

02_cloudwatch_logs_anomaly_warning

イベント数は1でした。

03_cloudwatch_logs_anomaly_warning

04_cloudwatch_logs_anomaly_warning

単純に追加するだけでは、infoログは検出されないようです。

12時間ほど待つと、ログサンプルとトークンの値が増えた

ログサンプルの数が5個に増えました。

11_cloudwatch_logs_anomaly_warning

そして、トークンの値の表示も増えました。

12_cloudwatch_logs_anomaly_warning

イベント数が2または3のトークンの値3もあります。 実際にCloudWatch Logsのログを確認してみると、一致しました。

13_cloudwatch_logs_anomaly_warning

14_cloudwatch_logs_anomaly_warning

15_cloudwatch_logs_anomaly_warning

トークン名でフィルタリングする

パターンにある「トークン3」を選択すると、トークン3だけを表示できます。

21_cloudwatch_logs_anomaly_warning

また、フィルタリング部分のボックスを選択すると、いろいろなフィルタリングが設定できます。

22_cloudwatch_logs_anomaly_warning

23_cloudwatch_logs_anomaly_warning

24_cloudwatch_logs_anomaly_warning

実験開始から約24時間後、Lambdaコードのinfoログの乱数範囲を変更する

infoログの乱数範囲を大きく変更してみました。

import json
import logging
import random

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)


def lambda_handler(event, context):
    rand_value1 = int(random.uniform(0, 1000))
    rand_value2 = int(random.uniform(1_000_000, 1_000_000_000))

    if rand_value1 > 950:
        logger.warning(f"data size is large: {rand_value1}")

    logger.info(f"rand_value2: {rand_value2}")

    return {
        "statusCode": 200,
        "body": json.dumps("Hello from Lambda!")
    }

約24時間経過したが、Infoログは検出されなかった

Warningログだけです。

31_cloudwatch_logs_anomaly_warning

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.